class Solution {
public:
  // 双指针
    vector<int> sortedSquares(vector<int>& nums) {
        int k = nums.size()-1;
        vector<int> ret(nums.size(), 0);
        // 最大的数不是在最左边就是最右边, 左右分别比较从后往前填充新数组
        for(int i = 0, j = nums.size()-1; i <= j; ){ // i == j处理最后一个数
            if(-nums[i] < nums[j])  
            //如果全为正或全为负，平方也一定是升序顺序，否则负数取绝对值
                ret[k] = nums[j]*nums[j--];
            else
                ret[k] = nums[i]*nums[i++];
            --k;
        }
        return ret;
    }
};